home *** CD-ROM | disk | FTP | other *** search
/ Oh!X 2001 Spring / Oh!X 2001 Spring Special CD-ROM (Japan).7z / Oh!X 2001 Spring Special CD-ROM (Japan) (Track 1).bin / PUZZLE / puz01 / perm2.c < prev    next >
C/C++ Source or Header  |  2000-02-20  |  771b  |  51 lines

  1. /*
  2.  * perm2.c : 順列の生成(再帰版)
  3.  *
  4.  */
  5. #include <stdio.h>
  6.  
  7. #define N     4
  8. #define TRUE  1
  9. #define FALSE 0
  10. char use_number[N + 1];
  11. char perm[N];
  12.  
  13. void print_perm( void )
  14. {
  15.   int i;
  16.   for( i = 0; i < N; i++ ){
  17.     printf("%d ", perm[i] );
  18.   }
  19.   printf("\n");
  20. }
  21.  
  22. /* 順列を求める */
  23. void make_perm( int n )
  24. {
  25.   int i;
  26.   if( n == N ){
  27.     print_perm();               /* 順列の完成 */
  28.   } else {
  29.     for( i = 1; i <= N; i++ ){
  30.       if( use_number[i] == FALSE ){
  31.     use_number[i] = TRUE;
  32.     perm[n] = i;
  33.     make_perm( n + 1 );     /* 再帰呼び出し */
  34.     use_number[i] = FALSE;
  35.       }
  36.     }
  37.   }
  38. }
  39.  
  40. int main()
  41. {
  42.   int i;
  43.   for( i = 0; i < N; i++ ){
  44.     use_number[i] = FALSE;
  45.   }
  46.   make_perm( 0 );
  47.   return 0;
  48. }
  49.  
  50. /* end of file */
  51.